import { 
  createHttpClient, 
  createApiUtils, 
  createResponseFilter,
  http,
  apiGet,
  apiPost
} from '../dist/index.esm.js';

// 示例1: 使用默认实例
console.log('=== 使用默认实例 ===');
try {
  // 这只是示例代码，实际需要真实的API端点
  // const users = await apiGet('/api/users');
  // const newUser = await apiPost('/api/users', { name: 'John' });
  console.log('默认实例创建成功');
} catch (error) {
  console.error('默认实例示例出错:', error.message);
}

// 示例2: 创建自定义实例
console.log('\n=== 创建自定义实例 ===');
const customHttpClient = createHttpClient({
  baseURL: 'https://jsonplaceholder.typicode.com',
  timeout: 5000,
  getToken: () => 'Bearer token123',
  loadingHandler: {
    start: (code) => console.log(`🔄 Loading start: ${code}`),
    end: (code) => console.log(`✅ Loading end: ${code}`)
  },
  beforeRequest: (config) => {
    console.log(`📤 Request: ${config.method?.toUpperCase()} ${config.url}`);
  },
  beforeResponse: (response) => {
    console.log(`📥 Response: ${response.status} ${response.statusText}`);
  },
  errorHandler: (error) => {
    console.log(`❌ 拦截到错误: ${error.message}`);
    // 可以选择返回一个值来改变Promise的状态
    // 返回一个普通值会将Promise从rejected状态改为resolved状态
    // return '这是从错误中恢复的值';
    
    // 或者返回一个resolved Promise
    // return Promise.resolve('这是从错误中恢复的值');
    
    // 或者返回一个rejected Promise（保持原来的错误）
    // return Promise.reject(new Error('自定义错误消息'));
    
    // 或者不返回任何值（保持原来的错误处理）
  }
});

const api = createApiUtils(customHttpClient);

// 示例3: 测试真实API
console.log('\n=== 测试真实API ===');
try {
  const posts = await api.get('/posts', { _limit: 3 });
  console.log('获取到的数据:', posts.slice(0, 1)); // 只显示第一条
} catch (error) {
  console.error('API请求失败:', error.message);
}

// 示例4: URL参数替换
console.log('\n=== URL参数替换示例 ===');
try {
  const post = await api.get('/posts/{id}', { id: 1 });
  console.log('获取单个数据:', post);
} catch (error) {
  console.error('URL参数替换请求失败:', error.message);
}

// 示例5: 响应过滤器
console.log('\n=== 响应过滤器示例 ===');
const responseFilter = createResponseFilter({
  successCondition: (response) => {
    // 模拟不同的成功条件
    return response && (response.id || Array.isArray(response));
  },
  getErrorMessage: (response) => 'Custom error message',
  onError: (errorMsg) => {
    console.log(`❌ 过滤器捕获错误: ${errorMsg}`);
  }
});

// 测试响应过滤器
try {
  const mockResponse = { id: 1, title: 'Test' };
  const filtered = await responseFilter(mockResponse);
  console.log('过滤器处理成功:', filtered);
} catch (error) {
  console.error('过滤器处理失败:', error);
}

// 示例6: 错误处理拦截器
console.log('\n=== 错误处理拦截器示例 ===');
const httpClientWithErrorHandler = createHttpClient({
  baseURL: 'https://jsonplaceholder.typicode.com',
  errorHandler: (error) => {
    console.log(`❌ 拦截到错误: ${error.message}`);
    // 返回一个值来改变Promise的状态，从rejected变为resolved
    return '这是从错误中恢复的值';
  }
});

const apiWithErrorHandler = createApiUtils(httpClientWithErrorHandler);

// 这个请求会触发错误处理拦截器
apiWithErrorHandler.get('/nonexistent-endpoint')
  .then(result => {
    console.log('错误处理后的结果:', result);
  })
  .catch(error => {
    console.error('这不会被执行，因为错误已被拦截并处理:', error);
  });

console.log('\n🎉 所有示例执行完成！');